package com.job.mr.sortallnum;

import org.apache.hadoop.io.IntWritable;
import org.apache.hadoop.io.LongWritable;
import org.apache.hadoop.io.NullWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Mapper;

import java.io.IOException;


//编写mapper任务

public class SortNumMapper extends Mapper<LongWritable, Text, IntWritable, NullWritable> {


//    作为成员变量，提高重复使用效率
    IntWritable number = new IntWritable();

    /*

        因为文件比较小，因此每个文件当作一个split，
        每个split对应一个map 任务。共3个split，因此共3个map任务
        每个map任务只要直接将文件中每个数字原封不动写入即可（只定义一个分区）
        每个map任务最终会生成一个溢写文件，并且只包含一个分区，并且数据在该分区内
        是排序的，而 IntWritable 默认是 实现了 Comparator 接口的，并且默认升序排序

     */
    @Override
    protected void map(LongWritable key, Text value, Context context) throws IOException, InterruptedException {
        //使用默认的TextFileInputFormat，输入key 为行文本偏移量，value为每一行文本，
        //将value解析成int类型
        int num = Integer.parseInt(value.toString());
        // 将int转换成IntWritable
        number.set(num);
//        直接写入数字即可，这些数字在该map任务最终生成的文件中 由于shuffle机制 自动生序排序
        context.write(number, NullWritable.get());
    }
}
